package lk.icta.core.service;

import lk.icta.core.dto.ArrearsRecordDetail;
import lk.icta.core.dto.LeaseArrearsDetails;
import lk.icta.core.entity.AlienationRailway;
import lk.icta.user.entity.User;

import java.util.List;


public interface AlienationRailwayManagementService {

    /**
     * Add an  alienation
     *
     * @param alienation Alienation to be added
     * @param user       User requesting to add alienation
     */
    public void addAlienation(AlienationRailway alienation, User user);

    /**
     * Updating a  alienation
     *
     * @param alienation Alienation to be updated
     * @param user       User requesting to update alienation
     */
    public void updateAlienation(AlienationRailway alienation, User user);


    AlienationRailway getActiveAlienationByLandId(long id, User user);

    List<AlienationRailway> getAlienationByReferenceNo(String referenceNo, User user);

    List<LeaseArrearsDetails> getAlienationByLandDistrictBranchTrack(int districtId,int branchId,int railwayTrackId,double arrearsMax,double arrearsMin, User user);

    List AlienationStatisticsReportData(int branchId, int trackId, int districtId, String fromDate, String toDate, double fromValue, double toValue, User user, String language);

    List<AlienationRailway> getDetailedLeaseList(int branchId, int railwayTrackId, int districtId, int startingVal, int endingVal, String startingDate, String endingDate, User user, String language);

    List<AlienationRailway> getArrearsStatisticsReportData(int branchId, int trackId, int districtId, long minAmnt, long maxAmnt);

    List<ArrearsRecordDetail> getArrearsRecordList(int branchId, int railwayTrackId, int districtId, int yearsBack);

    List<AlienationRailway> getAlienationAvailableLikeLeaseNo(String referenceNo, User user);
}
